#include<iostream>
#include<list>
#include<unordered_map>
using namespace std;

list<int> lst;
unordered_map<int, list<int>::iterator> nodes;

void ins(int x, int k, int p) {
    auto it = nodes[k];
    if(p) it++; // 插入右边
    nodes[x] = lst.insert(it, x);
}

void del(int k) {
    auto it = nodes.find(k);// it是一个迭代器，指向一个键值对，键是k，值是一个迭代器，指向链表中的一个元素
    if(it != nodes.end()) {
        lst.erase(it->second);// 通过键值对的迭代器找到双端列表的迭代器，然后删除
        nodes.erase(it);
    }
}

int main() {
    lst.push_back(1);
    nodes[1] = --lst.end();
    
    int n, m;
    cin >> n;
    for(int i=2; i<=n; i++) {
        int k, p;
        cin >> k >> p;
        ins(i, k, p);
    }
    
    cin >> m;
    while(m--) {
        int k;
        cin >> k;
        del(k);
    }
    
    for(int val : lst) {
        cout << val << " ";
    }
    return 0;
}